﻿
namespace MIAP.Negocio
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using MIAP.DataAccess.Interfaces;
    using MIAP.Entidades;

    /// <summary>
    /// Clase de negocio para las operaciones de AltaUsuarioPerfiles.
    /// </summary>
    public class AltaUsuariosPerfilesNegocio
    {
        #region Campos

        /// <summary>
        /// Instancia para el acceso a datos de Administración de Proyectos.
        /// </summary>
        private readonly IUsuarioDao daoUsuario;

        /// <summary>
        /// Instancia para el acceso a datos de Administración de Proyectos.
        /// </summary>
        private readonly IUsuarioPerfilDao daoPerfilesUsuario;

        /// <summary>
        /// Instancia para el acceso a datos de Archivos.
        /// </summary>
        private readonly IArchivosDao daoArchivos;

        #endregion

        #region Constructor

        /// <summary>
        /// Inicializa una instancia de <see cref="AltaUsuariosPerfilesNegocio"/>
        /// </summary>
        public AltaUsuariosPerfilesNegocio()
        {
            this.daoUsuario = DataAccessFactory.Instance.CreateUsuariosDao();
            this.daoPerfilesUsuario = DataAccessFactory.Instance.CreateUsuarioPerfilDao();
            this.daoArchivos = DataAccessFactory.Instance.CreateArchivosDao();
        }

        #endregion

        /// <summary>
        /// Obtiene todos los archivos relacionados con un proyecto.
        /// </summary>
        /// <param name="idProyecto">Es el id del proyecto para el cual estarán ralacionados los archivos.</param>
        /// <returns>Lista con los archivos relacionados al proyecto.</returns>
        public List<ArchivoInfo> GetArchivosByIdProyecto(int idProyecto)
        {
            return this.daoPerfilesUsuario.GetArchivosByIdProyecto(idProyecto).ToList();
        }

        /// <summary>
        /// Agrega un nuevo perfil de usuario.
        /// </summary>
        /// <param name="usuario">Usuario que será agregado.</param>
        /// <param name="listArchivos">Lista de archivos sobre los cuales el usuario tendra </param>
        /// <param name="user"></param>
        public void AddPerfilUsuario(UsuarioInfo usuario, List<ArchivoInfo> listArchivos, string user)
        {
            this.daoPerfilesUsuario.AddPerfilUsuario(usuario, listArchivos, user);
        }

        /// <summary>
        /// Obtiene los archivos relacionados con el usuario.
        /// </summary>
        /// <param name="idUsuario">Id del usuario del cual se obtendrán los archivos.</param>
        /// <param name="idProyecto">Id del proyecto relacionado a los archivos.</param>
        /// /// <param name="idProyecto">Id del perfil.</param>
        /// <returns>Lista con los archivos relacionados con el usuario</returns>
        public List<ArchivoInfo> GetArchivosByUsuario(int idUsuario, int? idProyecto)
        {
            return this.daoPerfilesUsuario.GetArchivosByUsuario(idUsuario, idProyecto);
        }

        /// <summary>
        /// Obtiene la información del perfil del usuario.
        /// </summary>
        /// <param name="idUsuario">Id del usuario del cual se obtendra la infrmación.</param>
        /// <param name="idPerfil">Id del perfil ralacionado al usuario.</param>
        /// <returns>Información del perfil del usuario.</returns>
        public UsuarioInfo GetUsuarioPerfilById(int idUsuario, int idPerfil)
        {
            return this.daoPerfilesUsuario.GetUsuarioPerfilById(idUsuario, idPerfil); 
        }
        
        /// <summary>
        /// Modifica la información del perfil del usuario.
        /// </summary>
        /// <param name="usuario">Usuario que será modificado.</param>
        /// <param name="listArchivos">Lista de archivos relacionados al usuario.</param>
        /// <param name="user">Usuario que ejecuta la operación.</param>
        public void EditPerfilUsuario(UsuarioInfo usuario, List<ArchivoInfo> listArchivos, string user)
        {
            this.daoPerfilesUsuario.EditPerfilUsuario(usuario, listArchivos, user);
        }

        
        /// <summary>
        /// Verifica la existencia del perfil para un usuario.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario.</param>
        /// <param name="idPerfil">Es el id del perfil relacionado con el usuario.</param>
        /// <returns>Indicador.</returns>
        public bool VerifyExistencePerfilUsuario(int idUsuario, int idPerfil)
        {
            return this.daoPerfilesUsuario.VerifyExistencePerfilUsuario(idUsuario, idPerfil);
        }
    }
}
